package br.com.ucb.invista.domain;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.ucb.invista.enumeration.TipoFormaLancamento;

@Entity
@Table(name="TB_MOVIMENTO_FINANCEIRO")
@NamedQuery(name="MovimentoFinanceiro.findAll", query="SELECT m FROM MovimentoFinanceiro m")
public class MovimentoFinanceiro implements Serializable {
	
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue
	private int codigo;
	
	@ManyToOne
	@JoinColumn(name = "ID_PESSOA", referencedColumnName = "CODIGO")
	private Pessoa pessoa;
	
	@ManyToOne
	@JoinColumn(name = "ID_PRODUTO", referencedColumnName = "CODIGO")
	private Produto produto;
	
	@Column(name = "DATA_MOVIMENTACAO", nullable = false)
	@Temporal(TemporalType.DATE)
	private Date dataMovimentacao;
	
	@Column(name = "VALOR_UNITARIO", scale = 10, precision = 2, nullable = true)
	private Double valorUnitario;
	
	@Column(name = "VALOR_TOTAL", scale = 10, precision = 2, nullable = true)
	private Double valorTotal;
	
	@Column(name = "QUANTIDADE", scale = 10, nullable = true)
	private Integer quantidade;
	
	@Column(name = "NUMERO_NOTA_FISCAL", scale = 10, nullable = true)
	private String numeroNotaFical;
	
	@Column(name = "FORMA_PAGAMENTO", nullable = true)
	@Enumerated(EnumType.STRING)
	private TipoFormaLancamento tipoFormaLancamento;
	
	public MovimentoFinanceiro() {
		
	}

	public int getCodigo() {
		return codigo;
	}

	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public Date getDataMovimentacao() {
		return dataMovimentacao;
	}

	public void setDataMovimentacao(Date dataMovimentacao) {
		this.dataMovimentacao = dataMovimentacao;
	}

	public Double getValorUnitario() {
		return valorUnitario;
	}

	public void setValorUnitario(Double valorUnitario) {
		this.valorUnitario = valorUnitario;
	}

	public Double getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(Double valorTotal) {
		this.valorTotal = valorTotal;
	}

	public Integer getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(Integer quantidade) {
		this.quantidade = quantidade;
	}

	public String getNumeroNotaFical() {
		return numeroNotaFical;
	}

	public void setNumeroNotaFical(String numeroNotaFical) {
		this.numeroNotaFical = numeroNotaFical;
	}

	public TipoFormaLancamento getTipoFormaLancamento() {
		return tipoFormaLancamento;
	}

	public void setTipoFormaLancamento(TipoFormaLancamento tipoFormaLancamento) {
		this.tipoFormaLancamento = tipoFormaLancamento;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + codigo;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		MovimentoFinanceiro other = (MovimentoFinanceiro) obj;
		if (codigo != other.codigo)
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "MovimentoFinanceiro [codigo=" + codigo + ", pessoa=" + pessoa
				+ ", produto=" + produto + ", dataMovimentacao="
				+ dataMovimentacao + ", valorUnitario=" + valorUnitario
				+ ", valorTotal=" + valorTotal + ", quantidade=" + quantidade
				+ ", numeroNotaFical=" + numeroNotaFical
				+ ", tipoFormaLancamento=" + tipoFormaLancamento + "]";
	}
}